using System;

namespace MLSharp.Weka.Classifiers
{
	/// <summary>
	/// Option that control the construction of Random Forests.
	/// </summary>
	public class RandomForestOptions
	{
		#region Public Properties

		/// <summary>
		/// The seed to the random number generator used by the forest induction
		/// algorithm.
		/// </summary>
		/// <value>The default is a random number.</value>
		public int RandomSeed { get; set; }

		/// <summary>
		/// The number of trees to create.
		/// </summary>
		/// <value>Default is 10.</value>
		public int NumTrees { get; set; }

		/// <summary>
		/// The number of features to use for each random split.  Set to 0
		/// to have it automatically calculate the number
		/// of features using [log(feature-count)+1].
		/// </summary>
		/// <value>The default is 0.</value>
		public int NumFeatures { get; set; }

		/// <summary>
		/// The maximum depth of the trees.  Set to 0 to allow trees to grow
		/// to arbitrary depth.
		/// </summary>
		/// <value>The default is 0.</value>
		public int MaxTreeDepth { get; set; }

		#endregion

		#region Public Constructors

		/// <summary>
		/// Assigns default values to all the options.
		/// </summary>
		public RandomForestOptions()
		{
			RandomSeed = new Random().Next();
			NumTrees = 10;
			NumFeatures = 0;
			MaxTreeDepth = 0;
		}

		#endregion
	}
}
